<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"
    />
    <title>设计原则与编程技巧</title>
</head>

<body>
    <strong>单一职责原则（SRP）</strong>
    <p>SRP原则的应用难点就是如何去分离职责</p>
    <strong>最少知识原则（LKP）</strong>
    <p>一个软件实体应当尽可能少地与其他实体发生相互作用。这 里的软件实体是一个广义的概念，不仅包括对象，还包括系统、类、模块、函数、变量等</p>
    <strong>开放-封闭原则（OCP）</strong>

    <script type="text/javascript">
        // 接到了一个新的需求，即在 window.onload 函数中打印出页面中的所有节点数量
        // 如果目前的 window.onload 函数是一个拥有 500 行代码的巨型函数，里面密布着各种变量和
        // 交叉的业务逻辑，而我们的需求又不仅仅是打印一个 log 这么简单。那么“改好一个 bug，引发
        // 其他 bug”这样的事情就很可能会发生。我们永远不知道刚刚的改动会有什么副作用，很可能会
        // 引发一系列的连锁反应。
        // 那么，有没有办法在不修改代码的情况下，就能满足新需求呢？
        // 具体实现代码如下：
        window.onload=function(){
            var hrhr2 = '111'
            console.log(hrhr2)
            function aler(){
                alert("ooo")
            }
            aler(aler)
        }
        Function.prototype.after = function (afterfn) {
            var __self = this;
            return function () {
                var ret = __self.apply(this, arguments);
                afterfn.apply(this, arguments);
                return ret;
            }
        };
        console.log()
        window.onload = (window.onload || function () { }).after(function () {
            console.log(document.getElementsByTagName('*').length);
        });
    </script>

</body>

</html>